package dao;
import java.sql.Connection;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;  
import java.util.Vector;  
import javax.swing.JOptionPane;  
import modelo.dominio.TipoVeiculo;
import dao.banco.ConFactory;  
import java.util.Iterator;
import modelo.dominio.Veiculo;
  
public class DaoTipoVeiculo {  
     
   private final String URL = "jdbc:mysql://localhost/bd_locarrao",  
         NOME = "root", SENHA = "locarrao2";  
  
   private Connection con;  
   private Statement comando;  
   int i = 0;
   
   public boolean tabelaBDehVazia(){
      conectar();  
      Vector<TipoVeiculo> resultados = new Vector<TipoVeiculo>();  
      ResultSet rs;  
      try {  
         rs = comando.executeQuery("SELECT * FROM tb_tipo_veiculo");  
         while (rs.next()) {  
            TipoVeiculo temp = new TipoVeiculo();  
            // pega todos os atributos da pessoa  
            temp.setCod(rs.getInt("cod_tipo_veic"));
            temp.setTipoVeiculo(rs.getString("tipo"));  
            temp.setTaxaBase(rs.getDouble("taxa_base"));  
            temp.setPrecoKm(rs.getDouble("preco_km"));  
            resultados.add(temp);  
            break;//para não exigir do sistema, estamos pegando apenas uma linha para verificação
         }  
          
      } catch (SQLException e) {  
         imprimeErro("Erro ao buscar tipos de veiculos.", e.getMessage());  
      }  
      return(resultados.isEmpty());
   }
  
   public void apagar(String TipoVeiculo) {  
      conectar();  
      try {  
         comando  
               .executeUpdate("DELETE FROM tipo_veiculo WHERE tipoVeiculo = '" + i + "';");  
      } catch (SQLException e) {  
         imprimeErro("Erro ao apagar tipo do veiculo.", e.getMessage());  
      } finally {  
         fechar();  
      }  
   }  
   
      public TipoVeiculo buscarObjetoPorCod(int cod) {  
      conectar();  
      TipoVeiculo temp = new TipoVeiculo();  
      ResultSet rs;  
      try {  
         rs = comando.executeQuery("SELECT * FROM tb_tipo_veiculo WHERE cod_tipo_veic LIKE '"  
               + cod + "%';");
         while (rs.next()) {  
            temp.setTaxaBase(rs.getDouble("taxa_base"));
            temp.setPrecoKm(rs.getDouble("preco_km"));
         }
         return temp;  
      } catch (SQLException e) {  
         imprimeErro("Erro ao buscar o veiculo.", e.getMessage());  
         return null;  
      }  
  
   }

   /**
    * Método que busca por todos tipos de veiculos.
    * @return vetor de tipo veiculos.
    */

   public Vector<TipoVeiculo> buscarTodos() {  
      conectar();  
      Vector<TipoVeiculo> resultados = new Vector<TipoVeiculo>();  
      ResultSet rs;  
      try {  
         rs = comando.executeQuery("SELECT * FROM tb_tipo_veiculo");  
         while (rs.next()) {  
            TipoVeiculo temp = new TipoVeiculo();  
            // pega todos os atributos da pessoa  
            temp.setCod(rs.getInt("cod_tipo_veic"));
            temp.setTipoVeiculo(rs.getString("tipo"));  
            temp.setTaxaBase(rs.getDouble("taxa_base"));  
            temp.setPrecoKm(rs.getDouble("preco_km"));  
            resultados.add(temp);  
         }  
         return resultados;  
      } catch (SQLException e) {  
         imprimeErro("Erro ao buscar tipos de veiculos.", e.getMessage());  
         return null;  
      }  
   }
   /**
    * Método que busca tipo dos veiculos, ele busca os veiculos e retorna o seus
    * tipos
    * @param Veiculos vetor de veiculos para saber do tipo
    * @return vetor dos tipo de veiculo
    */
   public Vector<TipoVeiculo> buscarTipoDeDeterminadoVeiculo(Vector<Veiculo> Veiculos){
      conectar();  
      Vector<TipoVeiculo> resultados = new Vector<TipoVeiculo>();  
      ResultSet rs;
      try {
         for (Iterator<Veiculo> iterator = Veiculos.iterator(); iterator.hasNext();) {
            Veiculo v = iterator.next();
            rs = comando.executeQuery("SELECT * FROM tb_tipo_veiculo WHERE cod_tipo_veic = '"  + v.getCodTipoVeiculo() + "%';");
            while (rs.next()) {  
                TipoVeiculo temp = new TipoVeiculo();  
                temp.setCod(rs.getInt("cod_tipo_veic"));
                temp.setTipoVeiculo(rs.getString("tipo"));  
                temp.setTaxaBase(rs.getDouble("taxa_base"));  
                temp.setPrecoKm(rs.getDouble("preco_km"));  
                resultados.add(temp);  
            }  
         }
         return resultados;  
      } catch (SQLException e) {  
         imprimeErro("Erro ao buscar tipos de veiculos.", e.getMessage());  
         return null;  
      }
   }
  
   public void atualizar(TipoVeiculo tipoVeiculo) {  
      conectar();
      String com = "UPDATE tipo_veiculo SET tipo = '" + tipoVeiculo.getTipoVeiculo()  
            + "', taxa_base ='" + tipoVeiculo.getTaxaBase()  
            + "', preco_km ='" + tipoVeiculo.getPrecoKm()
            + "' WHERE  rg = '" + i + "';";  
      System.out.println("Atualizada!");  
      try {  
         comando.executeUpdate(com);  
      } catch (SQLException e) {  
         e.printStackTrace();  
      } finally {  
         fechar();  
      }  
   }  
   
   /**
    * busca um tipo de veiculo e retorna os tipos
    * @param i  o id a ser pesquisado
    * @return vetor de tipos veiculos desse id
    */
   public Vector<TipoVeiculo> buscar(String i) {  
      conectar();
      Vector<TipoVeiculo> resultados = new Vector<TipoVeiculo>();  
      ResultSet rs;  
      try {  
         rs = comando.executeQuery("SELECT * FROM tipo_veiculo WHERE `tipo` LIKE '"  
               + i + "%';");  
         while (rs.next()) {  
            TipoVeiculo temp = new TipoVeiculo();  
            temp.setCod(rs.getInt("cod_tipo_veic"));
            // pega todos os atributos da pessoa  
            temp.setTipoVeiculo(rs.getString("tipo"));  
            temp.setTaxaBase(rs.getDouble("taxa_base"));  
            temp.setPrecoKm(rs.getDouble("preco_km"));  
            resultados.add(temp);  
         }  
         return resultados;  
      } catch (SQLException e) {  
         imprimeErro("Erro ao buscar tipos de veiculos", e.getMessage());  
         return null;  
      }  
  
   }  
   /**
    * insere no banco de dados
    * @param tipoVeiculo tipo a ser inserido
    * @param i o codigo do tipo
    */
   public void insere(TipoVeiculo tipoVeiculo, int i){  
      conectar();  
      try {    
         
         comando.executeUpdate("INSERT INTO `bd_locarrao`.`tb_tipo_veiculo` (`tipo`, `taxa_base`, `preco_km`, `cod_tipo_veic`) VALUES ('" + tipoVeiculo.getTipoVeiculo() + "', '" + tipoVeiculo.getTaxaBase() +"','"+ tipoVeiculo.getPrecoKm() +"', '" + i + "')");
         System.out.println("Inserida!");
      } catch (SQLException e) {  
         imprimeErro("Erro ao inserir tipos de veiculo.", e.getMessage());  
      } finally {  
         fechar();
      }  
   } 
   
   /**
    * conecta no banco de dados
    */
   private void conectar() {  
      try {  
         con = ConFactory.conexao(URL, NOME, SENHA, ConFactory.MYSQL);  
         comando = con.createStatement();  
         System.out.println("Conectado!");  
      } catch (ClassNotFoundException e) {  
         imprimeErro("Erro ao carregar o driver", e.getMessage());  
      } catch (SQLException e) {  
         imprimeErro("Erro ao conectar", e.getMessage());  
      }  
   }  
   
   /**
    * fecha o banco de dados
    */
   private void fechar() {  
      try {  
         comando.close();  
         con.close();  
         System.out.println("Conexão Fechada");  
      } catch (SQLException e) {  
         imprimeErro("Erro ao fechar conexão", e.getMessage());  
      }  
   }  
  
   private void imprimeErro(String msg, String msgErro) {  
      JOptionPane.showMessageDialog(null, msg, "Erro crítico", 0);  
      System.err.println(msg);  
      System.out.println(msgErro);  
      System.exit(0);  
   }  
}